/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidades;

import bl.ContrasteBL;
import bl.UsuarioBL;
import java.io.Serializable;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import serviceEntities.Sinc;

/**
 *
 * @author RENZO
 */
public class Usuario implements IEntidad,Serializable {

    private long id;
    private Persona persona;
    private String nombreUsuario;
    private Date fechaRegistro;
    private String clave;

    public Usuario() {
        this.persona = new Persona();
    }

    public Usuario(long id, Persona persona, String nombreUsuario, Date fechaRegistro, String clave, UsuarioSession sesionActual) {
        this.id = id;
        this.persona = persona;
        this.nombreUsuario = nombreUsuario;
        this.fechaRegistro = fechaRegistro;
        this.clave = clave;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public UsuarioSession getSesionActual() {
        return UsuarioSession.obtenerInstancia();
    }

    @Override
    public Boolean save() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Object getEntity(long id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Object getEntity(long id, List<JoinObject> joinObjects) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Object> getAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Object> getAll(List<JoinObject> joinObjects) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public Boolean iniciarSesion(){
        Usuario temp_user = UsuarioBL.iniciarSesion(this.nombreUsuario, this.clave, this.persona.getTipo());
        if (temp_user != null){
            if(temp_user.getId() > 0){
                setId(temp_user.getId());
                setPersona(temp_user.getPersona());
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    
    public Boolean validarSesion(){
        return UsuarioBL.validarSesion(this.getSesionActual());
    }
    
    public Boolean validarSesion(String sid){
        UsuarioSession sesion = new UsuarioSession();
        sesion.setSid(sid);
        sesion.setUsuario(this);
        return UsuarioBL.validarSesion(sesion);
    }
    
    public Sinc obtenerSincronizacion() throws Exception,SQLException,ParseException{
       return new Sinc(ContrasteBL.getSincronizacion(this.getId()));
    }
    
    public Boolean cerrarSesion(){
        return true;
    }
}
